#ifndef _WX_SOUND_H_BASE_
#define _WX_SOUND_H_BASE_

#include "wx/defs.h"

#if wxUSE_SOUND

#include "wx/object.h"

#define wxSOUND_SYNC  ((unsigned)0)
#define wxSOUND_ASYNC ((unsigned)1)
#define wxSOUND_LOOP  ((unsigned)2)

class wxSoundBase : public wxObject {
  public:
    // Play the sound:
    bool Play( unsigned flags = wxSOUND_ASYNC ) const {
      wxASSERT_MSG( ( flags & wxSOUND_LOOP ) == 0 ||
                    ( flags & wxSOUND_ASYNC ) != 0,
                    wxT( "sound can only be looped asynchronously" ) );
      return DoPlay( flags );
    }

    // Plays sound from filename:
    static bool Play( const wxString& filename, unsigned flags = wxSOUND_ASYNC );

  protected:
    virtual bool DoPlay( unsigned flags ) const = 0;
};

// ----------------------------------------------------------------------------
// wxSound class implementation
// ----------------------------------------------------------------------------

#include "wx/unix/sound.h"

// ----------------------------------------------------------------------------
// wxSoundBase methods
// ----------------------------------------------------------------------------

inline bool wxSoundBase::Play( const wxString& filename, unsigned flags ) {
  wxSound snd( filename );
  return snd.IsOk() ? snd.Play( flags ) : false;
}

#endif // wxUSE_SOUND

#endif // _WX_SOUND_H_BASE_
